package com.tianquan.miracle.context;

import com.tianquan.miracle.util.MiracleUtils;
import com.tianquan.miracle.util.ServiceClassLoader;

/**
 * @Author: tianquan
 * @CreateTime: 2024-09-28  21:53
 * @Description: MiracleApplicationContext类用于管理应用程序的上下文环境 主要用于初始化和重新初始化上下文环境
 */
public class MiracleApplicationContext {

    /**
     * 刷新应用程序上下文的方法
     * 此方法负责创建新的应用程序上下文，初始化必要的工具类，并刷新上下文
     *
     * @param clazz 用于创建应用程序上下文的配置类
     * @param args  传递给应用程序的参数
     * @return 刷新后的应用程序上下文
     */
    public static ApplicationContext refresh(Class<?> clazz, String[] args) {
        // 创建容器
        ApplicationContext applicationContext = new DefaultApplicationContext(clazz, args);
        // 初始化工具类
        initUtil(applicationContext);
        // 刷新容器
        applicationContext.refresh();
        // 返回刷新后的容器
        return applicationContext;
    }

    /**
     * 初始化工具类的方法
     * 此方法负责初始化ServiceClassLoader和MiracleUtils，使它们能够在应用程序上下文中正常工作
     *
     * @param applicationContext 要初始化工具类的应用程序上下文
     */
    private static void initUtil(ApplicationContext applicationContext) {
        ServiceClassLoader.init(applicationContext);
        MiracleUtils.init(applicationContext);
    }

}

